package cn.fuxi2022.core.utils;

import org.mindrot.jbcrypt.BCrypt;

/**
 * 密码加密的工具类
 */
public class PasswordUtils {

    /**
     * 加密方法
     *
     * @param pwd 加密的文字
     * @return 密文
     */
    public static String encode(String pwd) {
        // BCrypt.gensalt():生成salt的方法
        // BCrypt.hashpw(password, BCrypt.gensalt())：生成hash密码，传入用户密码和salt
        return BCrypt.hashpw(pwd, BCrypt.gensalt());
    }

    /**
     * 验证 检查明文是否与加密的密文匹配
     *
     * @param pwd   明文
     * @param dbPwd 加密的密文
     * @return 匹配为true，不匹配为false
     */
    public static Boolean checkPwd(String pwd, String dbPwd) {
        // 密码验证，传入密码候选值和hash密码，返回布尔值
        return BCrypt.checkpw(pwd, dbPwd);
    }

//    public static void main(String[] args) {
//        String encode = PasswordUtils.encode("c8837b23ff8aaa8a2dde915473ce0991");
//        // 一段密码执行两次都不同
//        // $2a$10$I0ItteB06iMdVR2E/9aBWeWZLwmqTJt52UJrcvVW.srO.igYKFsMi
//        // $2a$10$bYwAhyEPWP5ZRJr0gJjuG.w9QZtczLYWffmWGVAV6Dmyk1jamaPLi
//        // $2a$10$RwDNRMEnnJgqWu5wa2nw6.3VUBtMxXlIvmLOkUVGnaEdGrDMMMKFW
//        System.out.println(encode);
//
//        String a = "$2a$10$I0ItteB06iMdVR2E/9aBWeWZLwmqTJt52UJrcvVW.srO.igYKFsMi";
//        String b = "$2a$10$bYwAhyEPWP5ZRJr0gJjuG.w9QZtczLYWffmWGVAV6Dmyk1jamaPLi";
//
//        System.out.println(PasswordUtils.checkPwd("123321",a ));  // true
//        System.out.println(PasswordUtils.checkPwd("123321",b));  // true
//        System.out.println(PasswordUtils.checkPwd("123",b));  // false
//    }
}
